/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BancoDados;

import Sistema.Defs;
import Utilidades.UtilityDB;
import Utilidades.UtilityTime;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServletRequest;

/**
 * Created on : May 18, 2011, 7:50:32 PM
 * @author diogo
 *
 * SQL: 
CREATE TABLE Profissional (
CodProfissional       SERIAL NOT NULL,
CPF                  dm_CPF NULL UNIQUE,
Nome                 dm_nome,
Fantasia             dm_nome2,
Sexo                 char(1) NOT NULL,
FoneFixo             dm_telefone,
FoneCel              dm_telefone,
Endereco             dm_local,
Bairro               dm_local,
Cidade               dm_local,
UF                   dm_UF,
RG_Num               dm_RG,
RG_Org_Exp           char(6) NOT NULL,
RG_Data_Exp          date NOT NULL,
CarteiraProfissional varchar(14) NOT NULL,
CNH_Registro         varchar(12),
CNH_Cat              varchar(10),
CNH_Vencto           date,
DataNascimento       date NOT NULL,
Alocado              bool NOT NULL,
PRIMARY KEY (CodProfissional));
 */
public final class Profissional extends Dado implements Entidade {

	private int CodProfissional        ;
	private String CPF                 ;
	private String Nome                ;
	private String Fantasia            ;
	private String Sexo                ;
	private String FoneFixo            ;
	private String FoneCel             ;
	private String Endereco            ;
	private String Bairro              ;
	private String Cidade              ;
	private String UF                  ;
	private String RG_Num              ;
	private String RG_Org_Exp          ;
	private Date RG_Data_Exp           ;
	private String CarteiraProfissional;
	private String CNH_Registro        ;
	private String CNH_Cat             ;
	private Date CNH_Vencto            ;
	private Date DataNascimento        ;
	private boolean  Alocado           ;

	// <editor-fold defaultstate="collapsed" desc="comment">
	public boolean isAlocado() {
		return Alocado;
	}

	public String getBairro() {
		return Bairro;
	}

	public String getCNH_Cat() {
		return CNH_Cat;
	}

	public String getCNH_Registro() {
		return CNH_Registro;
	}

	public Date getCNH_Vencto() {
		return CNH_Vencto;
	}

	public String getCPF() {
		return CPF;
	}

	public String getCarteiraProfissional() {
		return CarteiraProfissional;
	}

	public String getCidade() {
		return Cidade;
	}

	public int getCodProfissional() {
		return CodProfissional;
	}

	public Date getDataNascimento() {
		return DataNascimento;
	}

	public String getEndereco() {
		return Endereco;
	}

	public String getFantasia() {
		return Fantasia;
	}

	public String getFoneCel() {
		return FoneCel;
	}

	public String getFoneFixo() {
		return FoneFixo;
	}

	public String getNome() {
		return Nome;
	}

	public Date getRG_Data_Exp() {
		return RG_Data_Exp;
	}

	public String getRG_Num() {
		return RG_Num;
	}

	public String getRG_Org_Exp() {
		return RG_Org_Exp;
	}

	public String getSexo() {
		return Sexo;
	}

	public String getUF() {
		return UF;
	}

	public Profissional(int CodProfissional, String CPF, String Nome, String Fantasia, String Sexo, String FoneFixo, String FoneCel, String Endereco, String Bairro, String Cidade, String UF, String RG_Num, String RG_Org_Exp, Date RG_Data_Exp, String CarteiraProfissional, String CNH_Registro, String CNH_Cat, Date CNH_Vencto, Date DataNascimento, boolean Alocado) {
		this.CodProfissional = CodProfissional;
		this.CPF = CPF;
		this.Nome = Nome;
		this.Fantasia = Fantasia;
		this.Sexo = Sexo;
		this.FoneFixo = FoneFixo;
		this.FoneCel = FoneCel;
		this.Endereco = Endereco;
		this.Bairro = Bairro;
		this.Cidade = Cidade;
		this.UF = UF;
		this.RG_Num = RG_Num;
		this.RG_Org_Exp = RG_Org_Exp;
		this.RG_Data_Exp = RG_Data_Exp;
		this.CarteiraProfissional = CarteiraProfissional;
		this.CNH_Registro = CNH_Registro;
		this.CNH_Cat = CNH_Cat;
		this.CNH_Vencto = CNH_Vencto;
		this.DataNascimento = DataNascimento;
		this.Alocado = Alocado;
	}

	
	public Profissional() {
	}

	
	// </editor-fold>

	@Override
	public String getTableName() {
		return "Profissional";
	}

	@Override
	public String[] getPrimaryKey() {
		return new String[]{"CodProfissional"};
	}

	@Override
	public String[] getColumns() {
		return new String[]{
					"CPF",
					"Nome",
					"Fantasia",
					"Sexo",
					"FoneFixo",
					"FoneCel",
					"Endereco",
					"Bairro",
					"Cidade",
					"UF",
					"RG_Num",
					"RG_Org_Exp",
					"RG_Data_Exp",
					"CarteiraProfissional",
					"CNH_Registro",
					"CNH_Cat",
					"CNH_Vencto",
					"DataNascimento",
					"Alocado"
				};
	}

	public static boolean Inserir(
			String CPF, String Nome, String Fantasia, String Sexo,
			String FoneFixo, String FoneCel,
			String Endereco, String Bairro, String Cidade, String UF,
			String RG_Num, String RG_Org_Exp, Date RG_Data_Exp,
			String CarteiraProfissional, String CNH_Registro, String CNH_Cat, Date CNH_Vencto,
			Date DataNascimento, boolean Alocado,
			String Login, String Senha) {



		String SQL = UtilityDB.CallFunction("fn_inserir_profissional",
				CPF,
				Nome,
				Fantasia,
				Sexo,
				FoneFixo,
				FoneCel,
				Endereco,
				Bairro,
				Cidade,
				UF,
				RG_Num,
				RG_Org_Exp,
				RG_Data_Exp,
				CarteiraProfissional,
				CNH_Registro,
				CNH_Cat,
				CNH_Vencto,
				DataNascimento,
				//Alocado,
				Login,
				Senha
				);

		//int linhasAfetadas = c.cadastrar(SQL);
		boolean inseriu = false;
		try {
			//System.out.println("SQL: " + SQL);
			ResultSet rs = c.consultar(SQL);
			rs.next();
			System.out.println("INSERIU? " + rs.getBoolean(1));
			inseriu = rs.getBoolean(1);
		} catch (Exception e) {
			e.printStackTrace();
			inseriu = false;
		}
		return inseriu;
	}

	public static boolean Inserir(HttpServletRequest request) {
		String[] colunas = new Profissional().getColumns();
		int x=0;
		String CPF = 			request.getParameter(colunas[x++]);
		String Nome = 			request.getParameter(colunas[x++]);
		String Fantasia = 		request.getParameter(colunas[x++]);
		String Sexo = 			request.getParameter(colunas[x++]);
		String FoneFixo = 		request.getParameter(colunas[x++]);
		String FoneCel = 		request.getParameter(colunas[x++]);
		String Endereco = 		request.getParameter(colunas[x++]);
		String Bairro = 		request.getParameter(colunas[x++]);
		String Cidade = 		request.getParameter(colunas[x++]);
		String UF = 			request.getParameter(colunas[x++]);
		String RG_Num = 		request.getParameter(colunas[x++]);
		String RG_Org_Exp = 	request.getParameter(colunas[x++]);
		Date RG_Data_Exp = 		UtilityTime.ToDate(request.getParameter(colunas[x++]), Defs.divisorData);
		String CarteiraProfissional = request.getParameter(colunas[x++]);
		String CNH_Registro = 	request.getParameter(colunas[x++]);
		String CNH_Cat = 		request.getParameter(colunas[x++]);
		Date CNH_Vencto = 		UtilityTime.ToDate(request.getParameter(colunas[x++]), Defs.divisorData);
		String Login =			request.getParameter("Login");
		String Senha =			request.getParameter("Senha");
		//boolean Alocado = Boolean.parseBoolean(request.getParameter(colunas[x++]));
		boolean Alocado = false;

		return Inserir(CPF, Nome, Fantasia, Sexo, FoneFixo, FoneCel, Endereco, Bairro, Cidade, UF, RG_Num, RG_Org_Exp, RG_Data_Exp, CarteiraProfissional, CNH_Registro, CNH_Cat, CNH_Vencto, CNH_Vencto, Alocado, Login, Senha);
	}

	public static ResultSet ListarEspecialista(int codigoProfissao, boolean alocado){
		ResultSet rs = null;

		String SQL = UtilityDB.CallFunction("fn_lista_especialista", codigoProfissao, alocado);
		try {
			rs = c.consultar(SQL);
		} catch (SQLException ex) {
			Logger.getLogger(Profissional.class.getName()).log(Level.SEVERE, null, ex);
		}

		
		return rs;
	}

	/**
	 * retorna true se ja tem o cpf
	 * @param CPF
	 * @return
	 */
	public static boolean ExisteCpf(String CPF){
		ResultSet rs = null;
		boolean resultado = true;
		//fn_existe_profissional_CPF
		String SQL = UtilityDB.CallFunction("fn_existe_profissional_CPF", CPF);
		try {
			rs = c.consultar(SQL);
			rs.next();
			resultado = rs.getBoolean(1);
		} catch (SQLException ex) {
			Logger.getLogger(Profissional.class.getName()).log(Level.SEVERE, null, ex);
		}
		
		return resultado;
	}
}
